package org.springboot.szsrcb.srvice;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springboot.szsrcb.entity.Attachment;
import org.springboot.szsrcb.entity.Req_base_info;
import org.springboot.szsrcb.entity.Req_bill;
import org.springboot.szsrcb.entity.Req_team_info_log;
import org.springboot.szsrcb.entity.Req_work_log;
import org.springboot.szsrcb.entity.Test_base_info;
import org.springboot.szsrcb.entity.Test_bill;
import org.springboot.szsrcb.entity.Test_team_info_log;
import org.springboot.szsrcb.entity.Test_testing_info;
import org.springboot.szsrcb.entity.Test_work_log;
import org.springboot.szsrcb.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
public class Excel_Service {
	private static final Logger logger = LoggerFactory.getLogger(Excel_Service.class);

	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	private POIFSFileSystem fs;
	private HSSFWorkbook wb;
	private HSSFSheet sheet;
	private HSSFRow row;
	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
	private SimpleDateFormat sdf_yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
	
	@Autowired
	private Req_bill_Service req_bill_Service;
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private Test_bill_Service test_bill_Service;
	
	public InputStream test_info_sum(InputStream is, String test_id) {
		InputStream fis=null;
		try {
			POIFSFileSystem fs = new POIFSFileSystem(is);
			HSSFWorkbook wb = new HSSFWorkbook(fs);
			
			HSSFSheet sheet = wb.getSheetAt(0);
		//	HSSFRow row = sheet.getRow(0);
			//sheet.getRow(0).getCell(0).set
			Test_bill test_bill=test_bill_Service.search_a_test_bill_by_id(test_id);
			Test_base_info test_base_info=test_bill_Service.search_a_test_base_info_by_testid(test_id);
			Test_testing_info test_testing_info=test_bill_Service.search_a_test_testing_info_by_testid(test_id);
			Req_bill req_bill=req_bill_Service.req_bill_search_by_id(String.valueOf(test_bill.getReq_id()));
			//送测清单编号： 		
			sheet.getRow(1).getCell(0).setCellValue("送测清单编号："+test_bill.getId());
			SimpleDateFormat sdf_v = new SimpleDateFormat("yyyyMMdd");			
			sheet.getRow(1).getCell(4).setCellValue("版本号："+sdf_v.format(new Date()));
			//"需求/缺陷编号：     req_bill_no+ req_title	        项目经理："
			sheet.getRow(2).getCell(1).setCellValue("需求/缺陷编号："+req_bill.getReq_bill_no()+" "+req_bill.getReq_title()+"\n项目经理："+test_bill.getTest_technical_director());
			//to enable newlines you need set a cell styles with wrap=true
		    CellStyle cs = wb.createCellStyle();
		  		    
		    Map<String, Object> properties = new HashMap<String, Object>();
		    
		    // border around a cell
		    properties.put(CellUtil.ALIGNMENT,CellStyle.ALIGN_LEFT);
		    properties.put(CellUtil.BORDER_TOP, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_LEFT, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_RIGHT, CellStyle.BORDER_THIN);
		    //cs.setWrapText(true);
		    
		   // sheet.getRow(2).getCell(1).setCellStyle(cs);
		   CellUtil.setCellStyleProperties(sheet.getRow(2).getCell(1), properties);
			//测试结论	[  ]通过    [  ]不通过
			String getTest_result=test_testing_info.getTest_result();
			String result_value1="通过";
			String result_value2="不通过";
			if(getTest_result.equals(result_value2)){
				sheet.getRow(4).getCell(1).setCellValue("[   ]通过 [ √ ]不通过");
			}else{
				sheet.getRow(4).getCell(1).setCellValue("[ √ ]通过 [   ]不通过");
			}			
			//测试组织人
			sheet.getRow(4).getCell(4).setCellValue(test_base_info.getTest_head());
			//年  月   日 ---     年      月      日，共    工作日。
			Date getTest_start_date=test_testing_info.getTest_start_date();
			Date getTest_end_date=test_testing_info.getTest_end_date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日");
			String tmp=sdf.format(getTest_start_date)+" --- "+sdf.format(getTest_end_date)+",共 "+test_testing_info.getTest_workload()+" 工作日。";
//			发现严重及以上级别缺陷   个，一般缺陷   个，其他级别缺陷   个。					
			tmp=tmp+"\n发现严重及以上级别缺陷 "+test_testing_info.getDeffect_critical_count()+" 个，一般缺陷 "+test_testing_info.getDeffect_ordinary_count()+" 个，其他级别缺陷 "+test_testing_info.getDeffect_other_count()+" 个。";
			cs.setWrapText(true);
			CellUtil.setCellStyleProperties(sheet.getRow(5).getCell(1), properties);
			sheet.getRow(5).getCell(1).setCellValue(tmp);
			
			//关联交易/功能
			tmp=test_testing_info.getRelation_funcation();
			tmp=tmp.replaceAll("<br>", "\n");
			tmp=tmp.replaceAll("</?[^<]+>", "");
			HSSFRichTextString richString = new HSSFRichTextString(tmp);
			sheet.getRow(6).getCell(1).setCellValue(richString);
			
			//渠道
		//	渠道：[     ]TELLER        [     ]核心   [     ]ATM       [     ]自助终端    [     ]电话银行  [     ]网银
		  //   [  ]填单机    [  ]其他客户端
		
			tmp="渠道：";
			String checkbox_value="0";
			if(test_testing_info.getTest_channel_is_Teller().equals(checkbox_value)){
				tmp=tmp+"[  ]TELLER ";
			}else{
				tmp=tmp+"[√]TELLER ";
			}
			if(test_testing_info.getTest_channel_is_Core().equals(checkbox_value)){
				tmp=tmp+"[  ]核心 ";
			}else{
				tmp=tmp+"[√]核心 ";
			}
			if(test_testing_info.getTest_channel_is_ATM().equals(checkbox_value)){
				tmp=tmp+"[  ]ATM ";
			}else{
				tmp=tmp+"[√]ATM ";
			}
			if(test_testing_info.getTest_channel_is_self_service_terminals().equals(checkbox_value)){
				tmp=tmp+"[  ]自助终端 ";
			}else{
				tmp=tmp+"[√]自助终端 ";
			}
			if(test_testing_info.getTest_channel_is_Tel_bank().equals(checkbox_value)){
				tmp=tmp+"[  ]电话银行 ";
			}else{
				tmp=tmp+"[√]电话银行 ";
			}
			if(test_testing_info.getTest_channel_is_Net_bank().equals(checkbox_value)){
				tmp=tmp+"[  ]网银 ";
			}else{
				tmp=tmp+"[√]网银 ";
			}
			//换行
			tmp=tmp+"\n      ";
			  //   [  ]填单机    [  ]其他客户端
			if(test_testing_info.getTest_channel_is_Fill_form_machine().equals(checkbox_value)){
				tmp=tmp+"[  ]填单机 ";
			}else{
				tmp=tmp+"[√]填单机 ";
			}
			if(test_testing_info.getTest_channel_is_Other().equals(checkbox_value)){
				tmp=tmp+"[  ]其他客户端 ";
			}else{
				tmp=tmp+"[√]其他客户端 :"+test_testing_info.getTest_channel_other_info();
			}
			//类型：[     ]查询交易   [      ]维护交易  [    ]财务交易  [     ]其他类型
			tmp=tmp+"\n类型：";
			if(test_testing_info.getTest_type_is_Query().equals(checkbox_value)){
				tmp=tmp+"[  ]查询交易 ";
			}else{
				tmp=tmp+"[√]查询交易 ";
			}
			if(test_testing_info.getTest_type_is_Maintain().equals(checkbox_value)){
				tmp=tmp+"[  ]维护交易 ";
			}else{
				tmp=tmp+"[√]维护交易 ";
			}
			if(test_testing_info.getTest_type_is_Finance().equals(checkbox_value)){
				tmp=tmp+"[  ]财务交易 ";
			}else{
				tmp=tmp+"[√]财务交易 ";
			}
			if(test_testing_info.getTest_type_is_Other().equals(checkbox_value)){
				tmp=tmp+"[  ]其他类型 ";
			}else{
				tmp=tmp+"[√]其他类型 :"+test_testing_info.getTest_type_Other_info();
			}
						
			CellUtil.setCellStyleProperties(sheet.getRow(7).getCell(1), properties);
			sheet.getRow(7).getCell(1).setCellValue(tmp);
			
//			"[  ]凭证状态（[  ]正常  [   ]异常）      [  ]账户状态 （[  ]正常 [  ]异常）     
//			[  ]余额校验（[  ]足    [   ]不足）      [  ]密码校验 （[  ]正确 [  ]错误）     
//			[  ]会计分录         [  ]限额管理        [  ]业务流程        [  ]操作界面      
//			[  ]批处理验证       [  ]MEMO验证        [  ]授权操作        [  ]数据同步    
//			[  ]应答信息         [  ]对账差错        [  ]清单打印        [  ]电子回单   
//			[  ]对手信息         [  ]摘要代码        [  ]报表信息        [  ]短信相关   
//			[  ]硬件设备         [  ]压力测试        [  ]超时处理        [  ]异常处理   
//			[  ]特殊/其他"				
			tmp="";
			if(test_testing_info.getTest_cover_is_certificate().equals(checkbox_value)){
				tmp=tmp+"[  ]凭证状态 (";
			}else{
				tmp=tmp+"[√]凭证状态 (";
			}
			if(test_testing_info.getTest_cover_is_certificate_Normal().equals(checkbox_value)){
				tmp=tmp+"[  ]正常 ";
			}else{
				tmp=tmp+"[√]正常 ";
			}
			if(test_testing_info.getTest_cover_is_certificate_Exception().equals(checkbox_value)){
				tmp=tmp+"[  ]异常)         ";
			}else{
				tmp=tmp+"[√]异常)         ";
			}
			
			if(test_testing_info.getTest_cover_is_account().equals(checkbox_value)){
				tmp=tmp+"[  ]账户状态 (";
			}else{
				tmp=tmp+"[√]账户状态 (";
			}
			
			if(test_testing_info.getTest_cover_is_account_Normal().equals(checkbox_value)){
				tmp=tmp+"[  ]正常 ";
			}else{
				tmp=tmp+"[√]正常 ";
			}
			if(test_testing_info.getTest_cover_is_account_Exception().equals(checkbox_value)){
				tmp=tmp+"[  ]异常) ";
			}else{
				tmp=tmp+"[√]异常) ";
			}
			//换行
			tmp=tmp+"\n";
			if(test_testing_info.getTest_cover_is_balance().equals(checkbox_value)){
				tmp=tmp+"[  ]余额校验 (";
			}else{
				tmp=tmp+"[√]余额校验 (";
			}
			if(test_testing_info.getTest_cover_is_balance_Normal().equals(checkbox_value)){
				tmp=tmp+"[  ]正常 ";
			}else{
				tmp=tmp+"[√]正常 ";
			}
			if(test_testing_info.getTest_cover_is_balance_Exception().equals(checkbox_value)){
				tmp=tmp+"[  ]异常)         ";
			}else{
				tmp=tmp+"[√]异常)         ";
			}
			
			if(test_testing_info.getTest_cover_is_password().equals(checkbox_value)){
				tmp=tmp+"[  ]密码校验 (";
			}else{
				tmp=tmp+"[√]密码校验 (";
			}
			
			if(test_testing_info.getTest_cover_is_password_Normal().equals(checkbox_value)){
				tmp=tmp+"[  ]正常 ";
			}else{
				tmp=tmp+"[√]正常 ";
			}
			if(test_testing_info.getTest_cover_is_password_Exception().equals(checkbox_value)){
				tmp=tmp+"[  ]异常) ";
			}else{
				tmp=tmp+"[√]异常) ";
			}
			//换行
			tmp=tmp+"\n";
			
			//[  ]会计分录         [  ]限额管理        [  ]业务流程        [  ]操作界面      
			if(test_testing_info.getTest_cover_is_accounting_entry().equals(checkbox_value)){
				tmp=tmp+"[  ]会计分录      ";
			}else{
				tmp=tmp+"[√]会计分录      ";
			}
			if(test_testing_info.getTest_cover_is_limit_management().equals(checkbox_value)){
				tmp=tmp+"[  ]限额管理      ";
			}else{
				tmp=tmp+"[√]限额管理      ";
			}
			if(test_testing_info.getTest_cover_is_business_process().equals(checkbox_value)){
				tmp=tmp+"[  ]业务流程      ";
			}else{
				tmp=tmp+"[√]业务流程      ";
			}
			if(test_testing_info.getTest_cover_is_operate_ui().equals(checkbox_value)){
				tmp=tmp+"[  ]操作界面      ";
			}else{
				tmp=tmp+"[√]操作界面      ";
			}
			//换行
			tmp=tmp+"\n";
			//[  ]批处理验证       [  ]MEMO验证        [  ]授权操作        [  ]数据同步 
			if(test_testing_info.getTest_cover_is_batch_check().equals(checkbox_value)){
				tmp=tmp+"[  ]批处理验证    ";
			}else{
				tmp=tmp+"[√]批处理验证    ";
			}
			if(test_testing_info.getTest_cover_is_MEMO_check().equals(checkbox_value)){
				tmp=tmp+"[  ]MEMO验证      ";
			}else{
				tmp=tmp+"[√]MEMO验证      ";
			}
			if(test_testing_info.getTest_cover_is_Authorized_handle().equals(checkbox_value)){
				tmp=tmp+"[  ]授权操作      ";
			}else{
				tmp=tmp+"[√]授权操作      ";
			}
			if(test_testing_info.getTest_cover_is_data_aync().equals(checkbox_value)){
				tmp=tmp+"[  ]数据同步      ";
			}else{
				tmp=tmp+"[√]数据同步      ";
			}
			//换行
			tmp=tmp+"\n";
			//[  ]应答信息         [  ]对账差错        [  ]清单打印        [  ]电子回单 
			if(test_testing_info.getTest_cover_is_answer_info().equals(checkbox_value)){
				tmp=tmp+"[  ]应答信息      ";
			}else{
				tmp=tmp+"[√]应答信息      ";
			}
			if(test_testing_info.getTest_cover_is_account_checking().equals(checkbox_value)){
				tmp=tmp+"[  ]对账差错      ";
			}else{
				tmp=tmp+"[√]对账差错      ";
			}
			if(test_testing_info.getTest_cover_is_bill_print().equals(checkbox_value)){
				tmp=tmp+"[  ]清单打印      ";
			}else{
				tmp=tmp+"[√]清单打印      ";
			}
			if(test_testing_info.getTest_cover_is_Electronic_receipt().equals(checkbox_value)){
				tmp=tmp+"[  ]电子回单      ";
			}else{
				tmp=tmp+"[√]电子回单      ";
			}
			tmp=tmp+"\n";
			//[  ]对手信息         [  ]摘要代码        [  ]报表信息        [  ]短信相关  
			if(test_testing_info.getTest_cover_is_opposite_info().equals(checkbox_value)){
				tmp=tmp+"[  ]对手信息      ";
			}else{
				tmp=tmp+"[√]对手信息      ";
			}
			if(test_testing_info.getTest_cover_is_summary_code().equals(checkbox_value)){
				tmp=tmp+"[  ]摘要代码      ";
			}else{
				tmp=tmp+"[√]摘要代码      ";
			}
			if(test_testing_info.getTest_cover_is_report_form_info().equals(checkbox_value)){
				tmp=tmp+"[  ]报表信息      ";
			}else{
				tmp=tmp+"[√]报表信息      ";
			}
			if(test_testing_info.getTest_cover_is_SMS().equals(checkbox_value)){
				tmp=tmp+"[  ]短信相关      ";
			}else{
				tmp=tmp+"[√]短信相关      ";
			}
			tmp=tmp+"\n";
			
			//[  ]硬件设备         [  ]压力测试        [  ]超时处理        [  ]异常处理   
			if(test_testing_info.getTest_cover_is_hardware().equals(checkbox_value)){
				tmp=tmp+"[  ]硬件设备      ";
			}else{
				tmp=tmp+"[√]硬件设备      ";
			}
			if(test_testing_info.getTest_cover_is_load_test().equals(checkbox_value)){
				tmp=tmp+"[  ]压力测试      ";
			}else{
				tmp=tmp+"[√]压力测试      ";
			}
			if(test_testing_info.getTest_cover_is_timeout().equals(checkbox_value)){
				tmp=tmp+"[  ]超时处理      ";
			}else{
				tmp=tmp+"[√]超时处理      ";
			}
			if(test_testing_info.getTest_cover_is_exception().equals(checkbox_value)){
				tmp=tmp+"[  ]异常处理      ";
			}else{
				tmp=tmp+"[√]异常处理      ";
			}
			tmp=tmp+"\n";
			
			//[  ]特殊/其他
			if(test_testing_info.getTest_cover_is_other().equals(checkbox_value)){
				tmp=tmp+"[  ]特殊/其他      ";
			}else{
				tmp=tmp+"[√]特殊/其他  :"+test_testing_info.getTest_cover_other_info();
			}
			
			CellUtil.setCellStyleProperties(sheet.getRow(8).getCell(1), properties);
			sheet.getRow(8).getCell(1).setCellValue(tmp);
			
			
			//其他说明
			tmp="";
			tmp=test_testing_info.getOther_remark();
			tmp=tmp.replaceAll("<br>", "\n");
			tmp=tmp.replaceAll("</?[^<]+>", "");
			//HSSFRichTextString richString = new HSSFRichTextString(tmp);
			
			CellUtil.setCellStyleProperties(sheet.getRow(9).getCell(1), properties);
			sheet.getRow(9).getCell(1).setCellValue(tmp);
			
			//    经测试，本项目满足业务需求，与技术人员沟通，可于       年   月   日    上线，请予以合理安排。		
			tmp="";
			Date getPlan_online_date=test_testing_info.getPlan_online_date();
			
			tmp="  经测试，本项目满足业务需求，与技术人员沟通，可于"+sdf.format(getPlan_online_date)+" 上线，请予以合理安排。";	
			sheet.getRow(11).getCell(1).setCellValue(tmp);
			//上线申请人
			sheet.getRow(12).getCell(1).setCellValue("");
			//"[  ]直接部署应用             [  ]同步部署参数应用
//			[  ]先部署参数，再部署应用    [  ]先部署应用，再部署参数
	//		[  ]步骤见附件               [  ]其他"				
			tmp="";
			String getPlan_online_step=test_testing_info.getPlan_online_step();
			String check_value1="直接部署应用";
			String check_value2="同步部署参数应用";
			String check_value3="先部署参数，再部署应用";
			String check_value4="先部署应用，再部署参数";
			String check_value5="步骤见附件";
			String check_value6="其他";
			if(getPlan_online_step.equals(check_value1)){
				tmp="[ √ ]直接部署应用    ";
			}else{
				tmp="[   ]直接部署应用    ";
			}
			if(getPlan_online_step.equals(check_value2)){
				tmp=tmp+"[ √ ]同步部署参数应用    \n";
			}else{
				tmp=tmp+"[   ]同步部署参数应用    \n";
			}
			if(getPlan_online_step.equals(check_value3)){
				tmp=tmp+"[ √ ]先部署参数，再部署应用    ";
			}else{
				tmp=tmp+"[   ]先部署参数，再部署应用    ";
			}
			if(getPlan_online_step.equals(check_value4)){
				tmp=tmp+"[ √ ]先部署应用，再部署参数    \n";
			}else{
				tmp=tmp+"[   ]先部署应用，再部署参数    \n";
			}
			if(getPlan_online_step.equals(check_value5)){
				tmp=tmp+"[ √ ]步骤见附件    ";
			}else{
				tmp=tmp+"[   ]步骤见附件    ";
			}
			if(getPlan_online_step.equals(check_value6)){
				tmp=tmp+"[ √ ]其他    \n";
			}else{
				tmp=tmp+"[   ]其他    \n";
			}
			
			sheet.getRow(13).getCell(1).setCellValue(tmp);
			
			
//			"[  ]无  原因：
			tmp="";
			String getContingency_plan=test_testing_info.getContingency_plan();
			String str_value1="无";
			String str_value2="影响小，可暂停（非重点业务、无客户或少量客户使用）";
			String str_value3="回退版本或热部署新版本";
			String str_value4="有替代交易功能或渠道";
			String str_value5="其他，预案见附件";
			if(getContingency_plan.equals(str_value1)){
				tmp=tmp+"[ √ ]无    原因："+test_testing_info.getContingency_plan_remark();
			}else{
				tmp=tmp+"[   ]无    原因：";
			}
			tmp=tmp+"\n";
//			[  ]有  [  ]影响小，可暂停（非重点业务、无客户或少量客户使用）
			if(getContingency_plan.equals(str_value2)){
				tmp=tmp+"[ √ ]有    [ √ ]影响小，可暂停（非重点业务、无客户或少量客户使用）";
			}else{
				tmp=tmp+"[   ]有    [   ]影响小，可暂停（非重点业务、无客户或少量客户使用）";
			}
			tmp=tmp+"\n";
//			[  ]回退版本或热部署新版本    技术人员确认：
			if(getContingency_plan.equals(str_value3)){
				tmp=tmp+"[ √ ]回退版本或热部署新版本    技术人员确认：";
			}else{
				tmp=tmp+"[   ]回退版本或热部署新版本    技术人员确认：";
			}
			tmp=tmp+"\n";
//			[  ]有替代交易功能或渠道，罗列如下：
			if(getContingency_plan.equals(str_value4)){
				tmp=tmp+"[ √ ]有替代交易功能或渠道，罗列如下："+test_testing_info.getContingency_plan_remark();
			}else{
				tmp=tmp+"[   ]有替代交易功能或渠道，罗列如下：";
			}
			tmp=tmp+"\n";
//			[  ]其他，预案见附件"				
			if(getContingency_plan.equals(str_value5)){
				tmp=tmp+"[ √ ]其他，预案见附件";
			}else{
				tmp=tmp+"[   ]其他，预案见附件";
			}
			//CellUtil.setCellStyleProperties(sheet.getRow(14).getCell(1), properties);
			sheet.getRow(14).getCell(1).setCellValue(tmp);
			
			//"跟踪事项/目的"	
			tmp="";
			String getOnline_trace_info=test_testing_info.getOnline_trace_info();
			tmp="跟踪事项/目的 \n"+getOnline_trace_info;
			sheet.getRow(15).getCell(1).setCellValue(tmp);
			
			//"跟踪时间"	
			tmp="";
			Date getOnline_trace_start_date=test_testing_info.getOnline_trace_start_date();
			Date getOnline_trace_end_date=test_testing_info.getOnline_trace_end_date();
			tmp="跟踪时间 \n "+sdf.format(getOnline_trace_start_date)+" \n "+sdf.format(getOnline_trace_end_date);
			//richString = new HSSFRichTextString(tmp);
			sheet.getRow(15).getCell(3).setCellValue(tmp);
			
//			"跟踪人
			tmp="";
			String getOnline_tracer=test_testing_info.getOnline_tracer();
			tmp="跟踪人 \n"+getOnline_tracer;
			sheet.getRow(15).getCell(5).setCellValue(tmp);

			tmp="";
//			"[  ]通知需求提出部门、提出人
			String getAttention_is_inform_dept_offer=test_testing_info.getAttention_is_inform_dept_offer();
			if(getAttention_is_inform_dept_offer.equals(checkbox_value)){
				tmp=tmp+"[   ]通知需求提出部门、提出人";
			}else{
				tmp=tmp+"[ √ ]通知需求提出部门、提出人";
			}
			tmp=tmp+"\n";
//			[  ]相关业务开展审批已完成
			if(test_testing_info.getAttention_is_business_check().equals(checkbox_value)){
				tmp=tmp+"[   ]相关业务开展审批已完成";
			}else{
				tmp=tmp+"[ √ ]相关业务开展审批已完成";
			}
			tmp=tmp+"\n";
//			[  ]是否需要行领导审批      [  ]需要   [  ]不需要
			if(test_testing_info.getAttention_is_bank_head_check().equals(checkbox_value)){
				tmp=tmp+"[   ]是否需要行领导审批      [  ]需要   [  ]不需要";
			}else{
				if(test_testing_info.getAttention_is_bank_head_check_yes().equals(checkbox_value)){
					tmp=tmp+"[ √ ]是否需要行领导审批      [ √ ]需要   [  ]不需要";
				}else{
					tmp=tmp+"[ √ ]是否需要行领导审批      [   ]需要   [ √ ]不需要";
				}
				
			}
			tmp=tmp+"\n";
//			[  ]其他"				
			if(test_testing_info.getAttention_is_other().equals(checkbox_value)){
				tmp=tmp+"[   ]其他";
			}else{
				tmp=tmp+"[ √ ]其他 "+test_testing_info.getAttention_other_info();
			}
			sheet.getRow(16).getCell(1).setCellValue(tmp);
			
			//save as 
			SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS");
			Date d=new Date();
			  String file = "d:\\SZSRCB\\Test_info_sum_"+test_id+"_"+sdf2.format(d)+".xls";
		        //if(wb instanceof HSSFWorkbook) file += "x";
		        FileOutputStream out = new FileOutputStream(file);
		        wb.write(out);		        
		        out.close();
		       
		     // 以流的形式下载文件。
	            fis = new BufferedInputStream(new FileInputStream(file));
		        
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fis;
	}

	//***********--------------------------
	//req_projec_trace
	//***********------------------------------
	public InputStream req_projec_trace(InputStream is) {
		InputStream fis=null;
		POIFSFileSystem fs;
		try {
			fs = new POIFSFileSystem(is);
			
			HSSFWorkbook wb = new HSSFWorkbook(fs);

			HSSFSheet sheet = wb.getSheetAt(0);
			//HSSFRow row = sheet.getRow(0);

			//-------------
			//汇总sheet Start
			//-------------
			List<Req_bill>	all_list=req_bill_Service.search_all_req_project();
		
			
			//登记项目总数：
			int project_count=all_list.size();
			sheet.getRow(1).getCell(1).setCellValue(project_count);
			//已结束跟踪项目：
			int end_trace_project_count=req_bill_Service.count_end_trace_project();
			sheet.getRow(2).getCell(1).setCellValue(end_trace_project_count);
			//业务方案中心负责人
			String business_manager=userService.find_business_manager();
			//
			int current_row=6;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
			for (Req_bill req_bill : all_list) {
				String req_staus=req_bill.getReq_status();				
				String req_id=String.valueOf(req_bill.getId());
				Req_base_info req_base_info =req_bill_Service.search_req_base_info(req_id);
				String get_node_value="";
				String node_value8="8结束跟踪";
				boolean is_end_trace=false;
				if(req_base_info!=null){					
					get_node_value=req_base_info.getNode_value();
					if(get_node_value!=null){
						if(get_node_value.equals(node_value8)){
							is_end_trace=true;
						}
					}
				}				
				
				
				
		
				//逐个req
				
				
				String status_value1="已接收";
				if(req_staus.equals(status_value1)){
					//需求状态=“已接收” 只有负责人					
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					//项目主题
					String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
					
					sheet.getRow(current_row).getCell(0).setCellValue(tmp);
					//填报人
					//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
					sheet.getRow(current_row).getCell(1).setCellValue(business_manager);					
					//"项目角色"
					sheet.getRow(current_row).getCell(2).setCellValue("负责人");					
					//类型
					//需求难度	大中小
					sheet.getRow(current_row).getCell(3).setCellValue("");		
					//领取需求日期
					//填报人=中心负责人，领取时间=需求录入日期；
					sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(req_bill.getReq_bill_create_date()));		
					//成员	
					sheet.getRow(current_row).getCell(5).setCellValue("");	
					//监理	
					sheet.getRow(current_row).getCell(6).setCellValue("");	
					//"技术负责人"
					sheet.getRow(current_row).getCell(7).setCellValue("");	
					//项目状态
					//需求状态=已接收/已分配，项目状态=领取需求；
					sheet.getRow(current_row).getCell(8).setCellValue("领取需求");	
					//项目节点
					sheet.getRow(current_row).getCell(9).setCellValue(""+
							"1 领取需求\n"+
							"2 提交需求\n"+
							"3 开始开发\n"+
							"4 系统测试\n"+
							"5 应用测试\n"+
							"6 完成测试\n"+
							"7 完成上线\n"+
							"8 结束跟踪"	);					
					//项目志/周报
					sheet.getRow(current_row).getCell(10).setCellValue("");		

				}
				
				String status_value0="已退回";
				if(req_staus.equals(status_value0)){
					//需求状态=“已接收” 只有负责人					
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					//项目主题
					String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
					
					sheet.getRow(current_row).getCell(0).setCellValue(tmp);
					//填报人
					//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
					sheet.getRow(current_row).getCell(1).setCellValue(business_manager);					
					//"项目角色"
					sheet.getRow(current_row).getCell(2).setCellValue("负责人");					
					//类型
					//需求难度	大中小
					sheet.getRow(current_row).getCell(3).setCellValue("");		
					//领取需求日期
					//填报人=中心负责人，领取时间=需求录入日期；
					sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(req_bill.getReq_bill_create_date()));		
					//成员	
					sheet.getRow(current_row).getCell(5).setCellValue("");	
					//监理	
					sheet.getRow(current_row).getCell(6).setCellValue("");	
					//"技术负责人"
					sheet.getRow(current_row).getCell(7).setCellValue("");	
					//项目状态
					//需求状态=已接收/已分配，项目状态=领取需求；
					sheet.getRow(current_row).getCell(8).setCellValue("已退回");	
					//项目节点
					sheet.getRow(current_row).getCell(9).setCellValue(""+
							"1 领取需求\n"+
							"2 提交需求\n"+
							"3 开始开发\n"+
							"4 系统测试\n"+
							"5 应用测试\n"+
							"6 完成测试\n"+
							"7 完成上线\n"+
							"8 结束跟踪"	);					
					//项目志/周报
					String reason="";
					String getSelect_reason=req_bill.getSelect_reason();
					String getOther_reason=req_bill.getOther_reason();
					if(getSelect_reason!=null){
						reason=getSelect_reason;
					}
					if(getOther_reason!=null){
						reason=reason+getOther_reason;
					}
					sheet.getRow(current_row).getCell(10).setCellValue(reason);		

				}
				
				String status_value2="已分配";
				if(req_staus.equals(status_value2)){
					//需求状态=“已分配/已完成”，填报人=需求分析人/需求负责人/需求监理人
					//---------------------填报 需求负责人
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					
					String g_Req_head=req_base_info.getReq_head();
					String g_Req_analyst=req_base_info.getReq_analyst();
					String g_Req_supervisor=req_base_info.getReq_supervisor();
					String g_Technical_director=req_base_info.getTechnical_director();
					Map <String,Object> map=new HashMap<String,Object>();
					map.put("req_bill", req_bill);
					map.put("req_base_info", req_base_info);
					map.put("current_row", current_row);
					map.put("reporter_name", g_Req_head);
					map.put("business_manager", business_manager);
					map.put("req_analyst", g_Req_analyst);
					map.put("req_supervisor", g_Req_supervisor);
					map.put("technical_director", g_Technical_director);
					map.put("current_row", current_row);
					map.put("sheet", sheet);
					map.put("wb", wb);
					map.put("role", "负责人");
					map.put("req_status", "领取需求");
					
//					Req_bill req_bill=(Req_bill) map.get("req_bill");
//					int current_row=(int) map.get("current_row");
//					String reporter_name=(String) map.get("reporter_name");
					input_row_date(map);
					
					
					//-------------填报 需求分析人
					String[] req_analyst_array=g_Req_analyst.split(",");
					List<String> req_analyst=new ArrayList<String>();
					for (int i = 0; i < req_analyst_array.length; i++) {
						String get_tmp=req_analyst_array[i];
						if(!get_tmp.equals(g_Req_head)){
							req_analyst.add(get_tmp);
						}
					}
					for (int i = 0; i < req_analyst.size(); i++) {
						current_row=current_row+1;
						Map <String,Object> map_row2=new HashMap<String,Object>();
						map_row2.put("current_row", current_row);
						map_row2.put("is_end_trace", is_end_trace);
						map_row2.put("sheet", sheet);	
						//新建一空行
						create_a_row(map_row2);
						
						//填写行内容
						String req_analyst_t=req_analyst.get(i);
						map.put("reporter_name", req_analyst_t);
						map.put("current_row", current_row);
						map.put("role", "成员");				
						
						input_row_date(map);
					}
										
					//----------------填报 需求监理人
					if(g_Req_supervisor!=null){
						String[] req_supervisor_array=g_Req_supervisor.split(",");
						List<String> supervisor_list=new ArrayList<String>();
						for (int i = 0; i < req_supervisor_array.length; i++) {
							String get_tmp=req_supervisor_array[i];
							boolean is_add=true;
							if(get_tmp.equals(g_Req_head)){
								is_add=false;
							}
							if(g_Req_analyst.contains(get_tmp)){
								is_add=false;
							}
							if(is_add){
								supervisor_list.add(get_tmp);
							}
						}
						for (int i = 0; i < supervisor_list.size(); i++) {
							current_row=current_row+1;
							Map <String,Object> map_row2=new HashMap<String,Object>();
							map_row2.put("current_row", current_row);
							map_row2.put("is_end_trace", is_end_trace);
							map_row2.put("sheet", sheet);	
							//新建一空行
							create_a_row(map_row2);
							
							//填写行内容
							String req_supervisor_t=supervisor_list.get(i);
							map.put("reporter_name", req_supervisor_t);
							map.put("current_row", current_row);
							map.put("role", "监理人");				
							
							input_row_date(map);
						}
					}
					//如果中心负责人做为需求监理人，则继续填报
				}
				
				//----------------"已完成"
				String status_value3="已完成";
				if(req_staus.equals(status_value3)){
					//需求状态=“已接收” 只有负责人					
					//需求状态=“已分配/已完成”，填报人=需求分析人/需求负责人/需求监理人
					//如果中心负责人做为需求监理人，则继续填报
					//---------------------填报 需求负责人
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					
					String g_Req_head=req_base_info.getReq_head();
					String g_Req_analyst=req_base_info.getReq_analyst();
					String g_Req_supervisor=req_base_info.getReq_supervisor();
					String g_Technical_director=req_base_info.getTechnical_director();
					Map <String,Object> map=new HashMap<String,Object>();
					map.put("req_bill", req_bill);
					map.put("req_base_info", req_base_info);
					map.put("current_row", current_row);
					map.put("reporter_name", g_Req_head);
					map.put("business_manager", business_manager);
					map.put("req_analyst", g_Req_analyst);
					map.put("req_supervisor", g_Req_supervisor);
					map.put("technical_director", g_Technical_director);
					map.put("current_row", current_row);
					map.put("sheet", sheet);
					map.put("wb", wb);
					map.put("role", "负责人");
					map.put("req_status", "提交需求");
					
//					Req_bill req_bill=(Req_bill) map.get("req_bill");
//					int current_row=(int) map.get("current_row");
//					String reporter_name=(String) map.get("reporter_name");
					input_row_date(map);
					
					
					//-------------填报 需求分析人
					String[] req_analyst_array=g_Req_analyst.split(",");
					List<String> req_analyst=new ArrayList<String>();
					for (int i = 0; i < req_analyst_array.length; i++) {
						String get_tmp=req_analyst_array[i];
						if(!get_tmp.equals(g_Req_head)){
							req_analyst.add(get_tmp);
						}
					}
					for (int i = 0; i < req_analyst.size(); i++) {
						current_row=current_row+1;
						Map <String,Object> map_row2=new HashMap<String,Object>();
						map_row2.put("current_row", current_row);
						map_row2.put("is_end_trace", is_end_trace);
						map_row2.put("sheet", sheet);	
						//新建一空行
						create_a_row(map_row2);
						
						//填写行内容
						String req_analyst_t=req_analyst.get(i);
						map.put("reporter_name", req_analyst_t);
						map.put("current_row", current_row);
						map.put("role", "成员");				
						
						input_row_date(map);
					}
										
					//----------------填报 需求监理人
					if(g_Req_supervisor!=null){
						String[] req_supervisor_array=g_Req_supervisor.split(",");
						List<String> supervisor_list=new ArrayList<String>();
						for (int i = 0; i < req_supervisor_array.length; i++) {
							String get_tmp=req_supervisor_array[i];
							boolean is_add=true;
							if(get_tmp.equals(g_Req_head)){
								is_add=false;
							}
							if(g_Req_analyst.contains(get_tmp)){
								is_add=false;
							}
							if(is_add){
								supervisor_list.add(get_tmp);
							}
						}
						for (int i = 0; i < supervisor_list.size(); i++) {
							current_row=current_row+1;
							Map <String,Object> map_row2=new HashMap<String,Object>();
							map_row2.put("current_row", current_row);
							map_row2.put("is_end_trace", is_end_trace);
							map_row2.put("sheet", sheet);	
							//新建一空行
							create_a_row(map_row2);
							
							//填写行内容
							String req_supervisor_t=supervisor_list.get(i);
							map.put("reporter_name", req_supervisor_t);
							map.put("current_row", current_row);
							map.put("role", "监理人");				
							
							input_row_date(map);
						}
					}
				}
				
				current_row=current_row+1;
			}
			
			
			//-------------
			//汇总sheet End
			//-------------
			//按人员
			//查询出有效成员
			//List<User> user_list=userService.getAllUserList();
			List<User> user_list=new ArrayList<User>();
			for (int i = 6; i < sheet.getLastRowNum(); i++) {
			       Row r = sheet.getRow(i);
			       String g_u=r.getCell(1).getStringCellValue();
			       boolean is_add_u=true;
			       for (Iterator iterator = user_list.iterator(); iterator.hasNext();) {
					User user = (User) iterator.next();
						if(user.getName().equals(g_u)){
							is_add_u=false;
						}
					}
			       if(is_add_u){
			    	   User u_tmp=new User();
			    	   u_tmp.setName(g_u);
			    	   user_list.add(u_tmp);
			       }
			}
			
			int sheet_count=1;
			for (User user : user_list) {
				//clone a sheet				
				String name=user.getName();
				//String name="李四";
				//HSSFSheet temp_sheet= wb.getSheet("member_template");
				//wb.getSheetIndex(arg0)
				HSSFSheet clone_sheet_tmp=wb.cloneSheet(1);
				wb.setSheetName(wb.getSheetIndex(clone_sheet_tmp),name); 
				
				clone_sheet_tmp.getRow(1).getCell(1).setCellValue(sdf.format(new Date()));
				
				int rowStart =6;
			    int rowEnd = sheet.getLastRowNum();
			    int lastColumn = 11;
			    int clone_current_row=4;
			    for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
			       Row r = sheet.getRow(rowNum);
			       if (r == null) {
			          // This whole row is empty
			          // Handle it as needed
			          continue;
			       }
			       r.getCell(1, Row.RETURN_BLANK_AS_NULL);
			       String g_name_tmp=r.getCell(1).getStringCellValue();
			       if(g_name_tmp.equals(name)){
			    	   //新建一空行
			    		Map <String,Object> map_row=new HashMap<String,Object>();
						map_row.put("current_row", clone_current_row);
						map_row.put("is_end_trace", false);
						map_row.put("sheet", clone_sheet_tmp);	
						//新建一行
						create_a_row(map_row);
						
			    	   for (int cn = 0; cn < lastColumn; cn++) {
					          //Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
					          Cell c = r.getCell(cn);
					          CellStyle cs=c.getCellStyle();
				        	  clone_sheet_tmp.getRow(clone_current_row).getCell(cn).setCellStyle(cs);
					          if (c != null) {					            					        	
					        	  RichTextString rts= c.getRichStringCellValue();
					        	  clone_sheet_tmp.getRow(clone_current_row).getCell(cn).setCellValue(rts);
					          }
					       }
			    	   
			    	   clone_current_row=clone_current_row+1;
			       }
			       
			    }
			}
			//remove template sheet
			//HSSFSheet temp_sheet= wb.getSheet("member_template");
			//wb.getSheetIndex(arg0)
			//HSSFSheet clone_sheet_tmp=wb.cloneSheet(1);
			wb.setActiveSheet(0);
			wb.removeSheetAt(1); 
			
			//save as 
			SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS");
			Date d=new Date();
			  String file = "d:\\SZSRCB\\req_projec_trace_"+sdf2.format(d)+".xls";
		        //if(wb instanceof HSSFWorkbook) file += "x";
		        FileOutputStream out = new FileOutputStream(file);
		        wb.write(out);		        
		        out.close();
		       
		     // 以流的形式下载文件。
	            fis = new BufferedInputStream(new FileInputStream(file));
	            
			} catch (IOException e) {				 
				e.printStackTrace();
			}
		return fis;
	}



	
	
	
	//***********--------------------------
	//test_projec_trace
	//***********------------------------------
	public InputStream test_projec_trace(InputStream is) {
		InputStream fis=null;
		POIFSFileSystem fs;
		try {
			fs = new POIFSFileSystem(is);
			
			HSSFWorkbook wb = new HSSFWorkbook(fs);

			HSSFSheet sheet = wb.getSheetAt(0);
			//HSSFRow row = sheet.getRow(0);

			//-------------
			//汇总sheet Start
			//-------------
			List<Test_bill>	all_list=test_bill_Service.search_all_test();
		
			
			//登记项目总数：
			int project_count=all_list.size();
			sheet.getRow(1).getCell(1).setCellValue(project_count);
			//已结束跟踪项目：
			int end_trace_project_count=test_bill_Service.count_end_trace_project();
			sheet.getRow(2).getCell(1).setCellValue(end_trace_project_count);
			//业务方案中心负责人
			String project_manager=userService.find_project_manager();
			//
			int current_row=6;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
			for (Test_bill test_bill : all_list) {
				logger.info("current_row="+current_row);
				String test_staus=test_bill.getTest_status();				
				String test_id=String.valueOf(test_bill.getId());
				Req_bill req_bill=req_bill_Service.req_bill_search_by_id(String.valueOf(test_bill.getReq_id()));
				Test_base_info test_base_info =test_bill_Service.search_a_test_base_info_by_testid(test_id);
				String get_node_value="";
				String node_value8="8结束跟踪";
				boolean is_end_trace=false;
				if(test_base_info!=null){					
					get_node_value=test_base_info.getNode_value();
					if(get_node_value!=null){
						if(get_node_value.equals(node_value8)){
							is_end_trace=true;
						}
					}
				}				
				
				//逐个req	
				
				String status_value1="已接收";
				if(test_staus.equals(status_value1)){
					//需求状态=“已接收” 只有负责人					
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					//项目主题
					String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
					
					sheet.getRow(current_row).getCell(0).setCellValue(tmp);
					//填报人
					//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
					sheet.getRow(current_row).getCell(1).setCellValue(project_manager);					
					//"项目角色"
					sheet.getRow(current_row).getCell(2).setCellValue("负责人");					
					//类型
					//需求难度	大中小
					sheet.getRow(current_row).getCell(3).setCellValue("");		
					//领取需求日期
					//填报人=中心负责人，领取时间=需求录入日期；
					sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(test_bill.getCreate_date()));		
					//成员	
					sheet.getRow(current_row).getCell(5).setCellValue("");	
					//监理	
					sheet.getRow(current_row).getCell(6).setCellValue("");	
					//"技术负责人"
					sheet.getRow(current_row).getCell(7).setCellValue("");	
					//项目状态
					//需求状态=已接收/已分配，项目状态=领取需求；
					sheet.getRow(current_row).getCell(8).setCellValue("应用测试");	
					//项目节点
					sheet.getRow(current_row).getCell(9).setCellValue(""+
							"1 领取需求\n"+
							"2 提交需求\n"+
							"3 开始开发\n"+
							"4 系统测试\n"+
							"5 应用测试\n"+
							"6 完成测试\n"+
							"7 完成上线\n"+
							"8 结束跟踪"	);					
					//项目志/周报
					sheet.getRow(current_row).getCell(10).setCellValue("");		
				}
				
				String status_value_X="已退回";
				if(test_staus.equals(status_value_X)){
					//需求状态=“已接收” 只有负责人					
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					//项目主题
					String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
					
					sheet.getRow(current_row).getCell(0).setCellValue(tmp);
					//填报人
					//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
					sheet.getRow(current_row).getCell(1).setCellValue(project_manager);					
					//"项目角色"
					sheet.getRow(current_row).getCell(2).setCellValue("负责人");					
					//类型
					//需求难度	大中小
					sheet.getRow(current_row).getCell(3).setCellValue("");		
					//领取需求日期
					//填报人=中心负责人，领取时间=需求录入日期；
					sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(test_bill.getCreate_date()));		
					//成员	
					sheet.getRow(current_row).getCell(5).setCellValue("");	
					//监理	
					sheet.getRow(current_row).getCell(6).setCellValue("");	
					//"技术负责人"
					sheet.getRow(current_row).getCell(7).setCellValue("");	
					//项目状态
					//需求状态=已接收/已分配，项目状态=领取需求；
					sheet.getRow(current_row).getCell(8).setCellValue("已退回");	
					//项目节点
					sheet.getRow(current_row).getCell(9).setCellValue(""+
							"1 领取需求\n"+
							"2 提交需求\n"+
							"3 开始开发\n"+
							"4 系统测试\n"+
							"5 应用测试\n"+
							"6 完成测试\n"+
							"7 完成上线\n"+
							"8 结束跟踪"	);					
					//项目志/周报
					String reason="";
					String getSelect_reason=test_bill.getSelect_reason();
					String getOther_reason=test_bill.getOther_reason();
					if(getSelect_reason!=null){
						reason=getSelect_reason;
					}
					if(getOther_reason!=null){
						reason=reason+getOther_reason;
					}
					sheet.getRow(current_row).getCell(10).setCellValue(reason);		

				}
				String status_value2="已分配";
				if(test_staus.equals(status_value2)){
					//需求状态=“已分配/已完成”，填报人=需求分析人/需求负责人/需求监理人
					//---------------------填报 需求负责人
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					
					String g_test_head=test_base_info.getTest_head();
					String g_test_executor=test_base_info.getTest_executor();
					String g_Req_supervisor=null;
					String g_Technical_director=test_bill.getTest_technical_director();
					Map <String,Object> map=new HashMap<String,Object>();
					map.put("req_bill", req_bill);
					map.put("test_bill", test_bill);
					map.put("test_base_info", test_base_info);
					map.put("current_row", current_row);
					map.put("reporter_name", g_test_head);
					map.put("business_manager", project_manager);
					map.put("req_analyst", g_test_executor);
					map.put("req_supervisor", g_Req_supervisor);
					map.put("technical_director", g_Technical_director);
					map.put("current_row", current_row);
					map.put("sheet", sheet);
					map.put("wb", wb);
					map.put("role", "负责人");
					map.put("req_status", "应用测试");
					
//					Req_bill req_bill=(Req_bill) map.get("req_bill");
//					int current_row=(int) map.get("current_row");
//					String reporter_name=(String) map.get("reporter_name");
					input_row_date_for_test(map);
					
					
					//-------------填报 需求分析人
					String[] test_executor_array=g_test_executor.split(",");
					List<String> test_executor_list=new ArrayList<String>();
					for (int i = 0; i < test_executor_array.length; i++) {
						String get_tmp=test_executor_array[i];
						if(!get_tmp.equals(g_test_head)){
							test_executor_list.add(get_tmp);
						}
					}
					for (int i = 0; i < test_executor_list.size(); i++) {
						current_row=current_row+1;
						Map <String,Object> map_row2=new HashMap<String,Object>();
						map_row2.put("current_row", current_row);
						map_row2.put("is_end_trace", is_end_trace);
						map_row2.put("sheet", sheet);	
						//新建一空行
						create_a_row(map_row2);
						
						//填写行内容
						String test_executor_t=test_executor_list.get(i);
						map.put("reporter_name", test_executor_t);
						map.put("current_row", current_row);
						map.put("role", "成员");				
						
						input_row_date_for_test(map);
					}
										
					//----------------填报 需求监理人
					/*if(g_Req_supervisor!=null){
						String[] req_supervisor_array=g_Req_supervisor.split(",");
						List<String> supervisor_list=new ArrayList<String>();
						for (int i = 0; i < req_supervisor_array.length; i++) {
							String get_tmp=req_supervisor_array[i];
							boolean is_add=true;
							if(get_tmp.equals(g_test_head)){
								is_add=false;
							}
							if(g_test_executor.contains(get_tmp)){
								is_add=false;
							}
							if(is_add){
								supervisor_list.add(get_tmp);
							}
						}
						for (int i = 0; i < supervisor_list.size(); i++) {
							current_row=current_row+1;
							Map <String,Object> map_row2=new HashMap<String,Object>();
							map_row2.put("current_row", current_row);
							map_row2.put("is_end_trace", is_end_trace);
							map_row2.put("sheet", sheet);	
							//新建一空行
							create_a_row(map_row2);
							
							//填写行内容
							String req_supervisor_t=supervisor_list.get(i);
							map.put("reporter_name", req_supervisor_t);
							map.put("current_row", current_row);
							map.put("role", "监理人");				
							
							input_row_date(map);
						}
					}*/
					//如果中心负责人做为需求监理人，则继续填报
				}
				
				//----------------"已完成"
				String status_value3="已完成";
				if(test_staus.equals(status_value3)){
					//需求状态=“已接收” 只有负责人					
					//需求状态=“已分配/已完成”，填报人=需求分析人/需求负责人/需求监理人
					//如果中心负责人做为需求监理人，则继续填报
					//---------------------填报 需求负责人
					Map <String,Object> map_row=new HashMap<String,Object>();
					map_row.put("current_row", current_row);
					map_row.put("is_end_trace", is_end_trace);
					map_row.put("sheet", sheet);	
					//新建一行
					create_a_row(map_row);
					
					
					String g_test_head=test_base_info.getTest_head();
					String g_test_executor=test_base_info.getTest_executor();
					String g_Req_supervisor=null;
					String g_Technical_director=test_bill.getTest_technical_director();
					Map <String,Object> map=new HashMap<String,Object>();
					map.put("req_bill", req_bill);
					map.put("test_bill", test_bill);
					map.put("test_base_info", test_base_info);
					//map.put("req_base_info", test_base_info);
					map.put("current_row", current_row);
					map.put("reporter_name", g_test_head);
					map.put("business_manager", project_manager);
					map.put("req_analyst", g_test_executor);
					map.put("req_supervisor", g_Req_supervisor);
					map.put("technical_director", g_Technical_director);
					map.put("current_row", current_row);
					map.put("sheet", sheet);
					map.put("wb", wb);
					map.put("role", "负责人");
					map.put("req_status", "完成测试");
					
//					Req_bill req_bill=(Req_bill) map.get("req_bill");
//					int current_row=(int) map.get("current_row");
//					String reporter_name=(String) map.get("reporter_name");
					input_row_date_for_test(map);
					
					
					//-------------填报 需求分析人
					String[] req_analyst_array=g_test_executor.split(",");
					List<String> req_analyst=new ArrayList<String>();
					for (int i = 0; i < req_analyst_array.length; i++) {
						String get_tmp=req_analyst_array[i];
						if(!get_tmp.equals(g_test_head)){
							req_analyst.add(get_tmp);
						}
					}
					for (int i = 0; i < req_analyst.size(); i++) {
						current_row=current_row+1;
						Map <String,Object> map_row2=new HashMap<String,Object>();
						map_row2.put("current_row", current_row);
						map_row2.put("is_end_trace", is_end_trace);
						map_row2.put("sheet", sheet);	
						//新建一空行
						create_a_row(map_row2);
						
						//填写行内容
						String req_analyst_t=req_analyst.get(i);
						map.put("reporter_name", req_analyst_t);
						map.put("current_row", current_row);
						map.put("role", "成员");				
						
						input_row_date_for_test(map);
					}
										
					//----------------填报 需求监理人
				/*	if(g_Req_supervisor!=null){
						String[] req_supervisor_array=g_Req_supervisor.split(",");
						List<String> supervisor_list=new ArrayList<String>();
						for (int i = 0; i < req_supervisor_array.length; i++) {
							String get_tmp=req_supervisor_array[i];
							boolean is_add=true;
							if(get_tmp.equals(g_test_head)){
								is_add=false;
							}
							if(g_test_executor.contains(get_tmp)){
								is_add=false;
							}
							if(is_add){
								supervisor_list.add(get_tmp);
							}
						}
						for (int i = 0; i < supervisor_list.size(); i++) {
							current_row=current_row+1;
							Map <String,Object> map_row2=new HashMap<String,Object>();
							map_row2.put("current_row", current_row);
							map_row2.put("is_end_trace", is_end_trace);
							map_row2.put("sheet", sheet);	
							//新建一空行
							create_a_row(map_row2);
							
							//填写行内容
							String req_supervisor_t=supervisor_list.get(i);
							map.put("reporter_name", req_supervisor_t);
							map.put("current_row", current_row);
							map.put("role", "监理人");				
							
							input_row_date(map);
						}
					}
				}*/
				}
				current_row=current_row+1;
			}
			
			
			//-------------
			//汇总sheet End
			//-------------
			//按人员
			//查询出有效成员
			//List<User> user_list=userService.getAllUserList();
			List<User> user_list=new ArrayList<User>();
			for (int i = 6; i < sheet.getLastRowNum(); i++) {
			       Row r = sheet.getRow(i);
			       logger.info("i="+i);
			       String g_u=r.getCell(1).getStringCellValue();
			       boolean is_add_u=true;
			       for (Iterator iterator = user_list.iterator(); iterator.hasNext();) {
					User user = (User) iterator.next();
						if(user.getName().equals(g_u)){
							is_add_u=false;
						}
					}
			       if(is_add_u){
			    	   User u_tmp=new User();
			    	   u_tmp.setName(g_u);
			    	   user_list.add(u_tmp);
			       }
			}
			
			int sheet_count=1;
			for (User user : user_list) {
				//clone a sheet				
				String name=user.getName();
				//String name="李四";
				//HSSFSheet temp_sheet= wb.getSheet("member_template");
				//wb.getSheetIndex(arg0)
				HSSFSheet clone_sheet_tmp=wb.cloneSheet(1);
				wb.setSheetName(wb.getSheetIndex(clone_sheet_tmp),name); 
				
				clone_sheet_tmp.getRow(1).getCell(1).setCellValue(sdf.format(new Date()));
				
				int rowStart =6;
			    int rowEnd = sheet.getLastRowNum();
			    int lastColumn = 11;
			    int clone_current_row=4;
			    for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
			       Row r = sheet.getRow(rowNum);
			       if (r == null) {
			          // This whole row is empty
			          // Handle it as needed
			          continue;
			       }
			       r.getCell(1, Row.RETURN_BLANK_AS_NULL);
			       String g_name_tmp=r.getCell(1).getStringCellValue();
			       if(g_name_tmp.equals(name)){
			    	   //新建一空行
			    		Map <String,Object> map_row=new HashMap<String,Object>();
						map_row.put("current_row", clone_current_row);
						map_row.put("is_end_trace", false);
						map_row.put("sheet", clone_sheet_tmp);	
						//新建一行
						create_a_row(map_row);
						
			    	   for (int cn = 0; cn < lastColumn; cn++) {
					          //Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
					          Cell c = r.getCell(cn);
					          CellStyle cs=c.getCellStyle();
				        	  clone_sheet_tmp.getRow(clone_current_row).getCell(cn).setCellStyle(cs);
					          if (c != null) {					            					        	
					        	  RichTextString rts= c.getRichStringCellValue();
					        	  clone_sheet_tmp.getRow(clone_current_row).getCell(cn).setCellValue(rts);
					          }
					       }
			    	   
			    	   clone_current_row=clone_current_row+1;
			       }
			       
			    }
			}
			//remove template sheet
			//HSSFSheet temp_sheet= wb.getSheet("member_template");
			//wb.getSheetIndex(arg0)
			//HSSFSheet clone_sheet_tmp=wb.cloneSheet(1);
			wb.setActiveSheet(0);
			wb.removeSheetAt(1); 
			
			//save as 
			SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS");
			Date d=new Date();
			  String file = "d:\\SZSRCB\\test_projec_trace_"+sdf2.format(d)+".xls";
		        //if(wb instanceof HSSFWorkbook) file += "x";
		        FileOutputStream out = new FileOutputStream(file);
		        wb.write(out);		        
		        out.close();
		       
		     // 以流的形式下载文件。
	            fis = new BufferedInputStream(new FileInputStream(file));
	            
			} catch (IOException e) {				 
				e.printStackTrace();
			}
		return fis;
	}




	private void create_a_row(Map<String, Object> map) {
		//新增一行 
		int current_row=(int) map.get("current_row");
		boolean is_end_trace=(boolean) map.get("is_end_trace");
		HSSFSheet sheet=(HSSFSheet) map.get("sheet");
		HSSFRow cur_row= sheet.createRow(current_row);
		 
		 Map<String, Object> properties = new HashMap<String, Object>();
		    
		    // border around a cell
		    properties.put(CellUtil.ALIGNMENT,CellStyle.ALIGN_LEFT);
		    properties.put(CellUtil.BORDER_TOP, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_LEFT, CellStyle.BORDER_THIN);
		    properties.put(CellUtil.BORDER_RIGHT, CellStyle.BORDER_THIN);
		   
		 /*   CellStyle style = wb.createCellStyle();
		    style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
			style.setFillPattern(CellStyle.SOLID_FOREGROUND);*/
		  //  Cell cell = row.createCell((short) 1);
		    //cell.setCellValue("X");
		   // cell.setCellStyle(style);
		    
		
		  if(is_end_trace){				    				    	    
			  properties.put(CellUtil.FILL_FOREGROUND_COLOR,IndexedColors.GREY_25_PERCENT.getIndex());
			  properties.put(CellUtil.FILL_PATTERN,CellStyle.SOLID_FOREGROUND);
		  	
		   }
		    properties.put(CellUtil.WRAP_TEXT,true);
		 for(int i=0;i<11;i++){
			 
			 HSSFCell cell_tmp= cur_row.createCell(i);
			 CellUtil.setCellStyleProperties(cell_tmp, properties);
			 //cell_tmp.setCellStyle(style);
			
		 }
		
	}




	private void input_row_date(Map<String, Object> map) {
		Req_bill req_bill=(Req_bill) map.get("req_bill");
		int current_row=(int) map.get("current_row");
		String reporter_name=(String) map.get("reporter_name");
		Req_base_info req_base_info=(Req_base_info) map.get("req_base_info");
		String business_manager=(String) map.get("business_manager");
		String req_analyst=(String) map.get("req_analyst");
		String req_supervisor=(String) map.get("req_supervisor");
		String technical_director=(String) map.get("technical_director");
		HSSFSheet sheet =(HSSFSheet) map.get("sheet");
		HSSFWorkbook wb=(HSSFWorkbook) map.get("wb");
		String role=(String) map.get("role");
		String req_status=(String) map.get("req_status");
		//项目主题
		String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
		sheet.getRow(current_row).getCell(0).setCellValue(tmp);
		//填报人
		//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
		sheet.getRow(current_row).getCell(1).setCellValue(reporter_name);					
		//"项目角色"
		sheet.getRow(current_row).getCell(2).setCellValue(role);					
		//类型
		//需求难度	大中小
		String getReq_difficult=req_base_info.getReq_difficult();
		String dif_value1="大";
		String dif_value2="中";
		String dif_value3="小";
		if(getReq_difficult.equals(dif_value1)){
			sheet.getRow(current_row).getCell(3).setCellValue("大");		
		}
		if(getReq_difficult.equals(dif_value2)){
			sheet.getRow(current_row).getCell(3).setCellValue("中");		
		}
		if(getReq_difficult.equals(dif_value3)){
			sheet.getRow(current_row).getCell(3).setCellValue("小");		
		}
			
		//领取需求日期
		//填报人=中心负责人，领取时间=需求录入日期；
		if(reporter_name.equals(business_manager)){
			sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(req_bill.getReq_bill_create_date()));
		}else{
			sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(req_base_info.getCreate_time()));
		}
		//成员	
		String team_member="";
		team_member=req_analyst+"\n";
		List<Req_team_info_log> team_log_list=req_bill_Service.search_req_team_info_log(String.valueOf(req_bill.getId()));
		if(team_log_list!=null){
			for (Req_team_info_log req_team_info_log : team_log_list) {
				String team_tmp=sdf_yyyyMMdd.format(req_team_info_log.getOperate_time())+" "+req_team_info_log.getUser_name()+" "+req_team_info_log.getOperate()+" "+req_team_info_log.getRole()+"\n";
				team_member=team_member+team_tmp;
			}
		}
		sheet.getRow(current_row).getCell(5).setCellValue(team_member);	
		//监理	
		sheet.getRow(current_row).getCell(6).setCellValue(req_supervisor);	
		//"技术负责人"
		sheet.getRow(current_row).getCell(7).setCellValue(technical_director);	
		//项目状态
		//需求状态=已接收/已分配，项目状态=领取需求；
		sheet.getRow(current_row).getCell(8).setCellValue(req_status);	
		//项目节点		
		String d1_str=get_date_str(req_bill.getId(), "1领取需求");
		String d2_str=get_date_str(req_bill.getId(), "2提交需求");
		String d3_str=get_date_str(req_bill.getId(), "3开始开发");
		String d4_str=get_date_str(req_bill.getId(), "4系统测试");
		String d5_str=get_date_str(req_bill.getId(), "5应用测试");
		String d6_str=get_date_str(req_bill.getId(), "6完成测试");
		String d7_str=get_date_str(req_bill.getId(), "7完成上线");
		String d8_str=get_date_str(req_bill.getId(), "8结束跟踪");
		
		sheet.getRow(current_row).getCell(9).setCellValue(""+
				"1 领取需求"+d1_str+"\n"+
				"2 提交需求"+d2_str+"\n"+
				"3 开始开发"+d3_str+"\n"+
				"4 系统测试"+d4_str+"\n"+
				"5 应用测试"+d5_str+"\n"+
				"6 完成测试"+d6_str+"\n"+
				"7 完成上线"+d7_str+"\n"+
				"8 结束跟踪"+d8_str+""	);					
		//项目志/周报
		String req_id=String.valueOf(req_bill.getId());
		List<Req_work_log> list=req_bill_Service.search_req_work_log_by_name(req_id, reporter_name);
		if(list==null){
			sheet.getRow(current_row).getCell(10).setCellValue("");
		}else{
			String worklog_tmp="";
		    HSSFFont font = wb.createFont();
		    font.setFontHeightInPoints((short) 9);
		    font.setColor(HSSFColor.RED.index);
		    font.setBold(true);
		    font.setFontName("宋体");
		    int i=1;
		    int len=0;
		    Date last_date=null;
			for (Req_work_log req_work_log : list) {
				
				String log_tmp=req_work_log.getWork_log();
				log_tmp=log_tmp.replaceAll("<br>", "\n");
				log_tmp=log_tmp.replaceAll("</?[^<]+>", "");
				worklog_tmp=worklog_tmp+sdf_yyyyMMdd.format(req_work_log.getWork_date())+"\n"+log_tmp+" \n\n";
				if(i==1){
					len=worklog_tmp.length();
					last_date=req_work_log.getWork_date();
				}
				i=i+1;
			}
			
			boolean is_cureent_7_day=false;
			Date currrent_date=new Date();
			long from = last_date.getTime();  
			long to = currrent_date.getTime();  
			int days = (int) ((to - from)/(1000 * 60 * 60 * 24)); 
			if(days<7){
				is_cureent_7_day=true;
			}
			
			if(is_cureent_7_day){			
				HSSFRichTextString richString = new HSSFRichTextString(worklog_tmp);
				richString.applyFont( 0, len, font );
				int len2=richString.length();
				
				 HSSFFont font2 = wb.createFont();
				    font2.setFontHeightInPoints((short) 9);
				    font2.setColor(HSSFColor.BLACK.index);
				    //font2.setBold(true);
				    font2.setFontName("宋体");
				if(len2>len){
					richString.applyFont( len, len2, font2);
				}
				sheet.getRow(current_row).getCell(10).setCellValue(richString);
			}else{
				HSSFRichTextString richString = new HSSFRichTextString(worklog_tmp);
				//richString.applyFont( 0, len, font );
				int len2=richString.length();
				
				 HSSFFont font2 = wb.createFont();
				 font2.setFontHeightInPoints((short) 9);
				 font2.setColor(HSSFColor.BLACK.index);
				    //font2.setBold(true);
				 font2.setFontName("宋体");
				 richString.applyFont( 0, len2, font2);
				 sheet.getRow(current_row).getCell(10).setCellValue(richString);
			}
		}
		
	}

	private void input_row_date_for_test(Map<String, Object> map) {
		Req_bill req_bill=(Req_bill) map.get("req_bill");
		Test_bill test_bill=(Test_bill) map.get("test_bill");
		int current_row=(int) map.get("current_row");
		String reporter_name=(String) map.get("reporter_name");
		Test_base_info test_base_info=(Test_base_info) map.get("test_base_info");
		String business_manager=(String) map.get("business_manager");
		String req_analyst=(String) map.get("req_analyst");
		String req_supervisor=(String) map.get("req_supervisor");
		String technical_director=(String) map.get("technical_director");
		HSSFSheet sheet =(HSSFSheet) map.get("sheet");
		HSSFWorkbook wb=(HSSFWorkbook) map.get("wb");
		String role=(String) map.get("role");
		String req_status=(String) map.get("req_status");
		//项目主题
		String tmp=req_bill.getReq_bill_no()+" "+req_bill.getReq_title();
		sheet.getRow(current_row).getCell(0).setCellValue(tmp);
		//填报人
		//需求状态=“已接收” 需求状态=“已接收”，填报人=业务方案中心负责人；
		sheet.getRow(current_row).getCell(1).setCellValue(reporter_name);					
		//"项目角色"
		sheet.getRow(current_row).getCell(2).setCellValue(role);					
		//类型
		//需求难度	大中小
		String getReq_difficult=test_base_info.getTest_difficult();
		String dif_value1="难";
		String dif_value2="中";
		String dif_value3="易";
		if(getReq_difficult.equals(dif_value1)){
			sheet.getRow(current_row).getCell(3).setCellValue("大");		
		}
		if(getReq_difficult.equals(dif_value2)){
			sheet.getRow(current_row).getCell(3).setCellValue("中");		
		}
		if(getReq_difficult.equals(dif_value3)){
			sheet.getRow(current_row).getCell(3).setCellValue("小");		
		}
			
		//领取需求日期
		//填报人=中心负责人，领取时间=需求录入日期；
		if(reporter_name.equals(business_manager)){
			sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(test_bill.getCreate_date()));
		}else{
			sheet.getRow(current_row).getCell(4).setCellValue(sdf.format(test_base_info.getCreate_time()));
		}
		//成员	
		String team_member="";
		team_member=req_analyst+"\n";
		List<Test_team_info_log> team_log_list=test_bill_Service.search_test_team_info_log(String.valueOf(test_bill.getId()));
		if(team_log_list!=null){
			for (Test_team_info_log test_team_info_log : team_log_list) {
				String team_tmp=sdf_yyyyMMdd.format(test_team_info_log.getOperate_time())+" "+test_team_info_log.getUser_name()+" "+test_team_info_log.getOperate()+" "+test_team_info_log.getRole()+"\n";
				team_member=team_member+team_tmp;
			}
		}
		sheet.getRow(current_row).getCell(5).setCellValue(team_member);	
		//监理	
		//sheet.getRow(current_row).getCell(6).setCellValue(req_supervisor);	
		//"技术负责人"
		sheet.getRow(current_row).getCell(7).setCellValue(technical_director);	
		//项目状态
		//需求状态=已接收/已分配，项目状态=领取需求；
		sheet.getRow(current_row).getCell(8).setCellValue(req_status);	
		//项目节点		
		String d1_str=get_date_str_for_test(test_bill.getId(), "1领取需求");
		String d2_str=get_date_str_for_test(test_bill.getId(), "2提交需求");
		String d3_str=get_date_str_for_test(test_bill.getId(), "3开始开发");
		String d4_str=get_date_str_for_test(test_bill.getId(), "4系统测试");
		String d5_str=get_date_str_for_test(test_bill.getId(), "5应用测试");
		String d6_str=get_date_str_for_test(test_bill.getId(), "6完成测试");
		String d7_str=get_date_str_for_test(test_bill.getId(), "7完成上线");
		String d8_str=get_date_str_for_test(test_bill.getId(), "8结束跟踪");
		
		sheet.getRow(current_row).getCell(9).setCellValue(""+
				"1 领取需求"+d1_str+"\n"+
				"2 提交需求"+d2_str+"\n"+
				"3 开始开发"+d3_str+"\n"+
				"4 系统测试"+d4_str+"\n"+
				"5 应用测试"+d5_str+"\n"+
				"6 完成测试"+d6_str+"\n"+
				"7 完成上线"+d7_str+"\n"+
				"8 结束跟踪"+d8_str+""	);					
		//项目志/周报
		String test_id=String.valueOf(test_bill.getId());
		List<Test_work_log> list=test_bill_Service.search_req_work_log_by_name(test_id, reporter_name);
		if(list==null){
			sheet.getRow(current_row).getCell(10).setCellValue("");
		}else{
			String worklog_tmp="";
		    HSSFFont font = wb.createFont();
		    font.setFontHeightInPoints((short) 9);
		    font.setColor(HSSFColor.RED.index);
		    font.setBold(true);
		    font.setFontName("宋体");
		    int i=1;
		    int len=0;
		    Date last_date=null;
			for (Test_work_log test_work_log : list) {
				
				String log_tmp=test_work_log.getWork_log();
				log_tmp=log_tmp.replaceAll("<br>", "\n");
				log_tmp=log_tmp.replaceAll("</?[^<]+>", "");
				worklog_tmp=worklog_tmp+sdf_yyyyMMdd.format(test_work_log.getWork_date())+"\n"+log_tmp+" \n\n";
				if(i==1){
					len=worklog_tmp.length();
					last_date=test_work_log.getWork_date();
				}
				i=i+1;
			}		
			boolean is_cureent_7_day=false;
			Date currrent_date=new Date();
			long from = last_date.getTime();  
			long to = currrent_date.getTime();  
			int days = (int) ((to - from)/(1000 * 60 * 60 * 24)); 
			if(days<7){
				is_cureent_7_day=true;
			}
			
			if(is_cureent_7_day){			
				HSSFRichTextString richString = new HSSFRichTextString(worklog_tmp);
				richString.applyFont( 0, len, font );
				int len2=richString.length();
				
				 HSSFFont font2 = wb.createFont();
				    font2.setFontHeightInPoints((short) 9);
				    font2.setColor(HSSFColor.BLACK.index);
				    //font2.setBold(true);
				    font2.setFontName("宋体");
				if(len2>len){
					richString.applyFont( len, len2, font2);
				}
				sheet.getRow(current_row).getCell(10).setCellValue(richString);
			}else{
				HSSFRichTextString richString = new HSSFRichTextString(worklog_tmp);
				//richString.applyFont( 0, len, font );
				int len2=richString.length();
				
				 HSSFFont font2 = wb.createFont();
				    font2.setFontHeightInPoints((short) 9);
				    font2.setColor(HSSFColor.BLACK.index);
				    //font2.setBold(true);
				    font2.setFontName("宋体");
				//if(len2>len){
					richString.applyFont( 0, len2, font2);
				//}
				sheet.getRow(current_row).getCell(10).setCellValue(richString);
			}
		}
		
	}



	private String get_date_str(Integer req_id, String node_value) {
		Date d1=req_bill_Service.search_node_value_date_by_req_id_and_value(req_id,node_value);
		String d1_str="";
		if(d1!=null){
			d1_str=sdf_yyyyMMdd.format(d1);
		}
		return d1_str;
	}
	private String get_date_str_for_test(Integer test_id, String node_value) {
		Date d1=test_bill_Service.search_node_value_date_by_test_id_and_value(String.valueOf(test_id),node_value);
		String d1_str="";
		if(d1!=null){
			d1_str=sdf_yyyyMMdd.format(d1);
		}
		return d1_str;
	}

}
